/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Blob;
import java.util.List;
import java.util.Random;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.*;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import persistence.SessionManager;
import util.*;

/**
 *
 * @author Johan
 */
public class MeerijdenController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        int ritId = Integer.parseInt(request.getParameter("id"));

        Session session = null;
        session = SessionManager.openSession();

        Transaction tx = session.beginTransaction();
        Rit rit = (Rit) session.load(Rit.class, new Integer(ritId));

// hier begint advertentie regel gedeelte die zichbaar is op meerijden pagina
        try {
            Advertentie tempAdv = new Advertentie();

            //lijst met advertenties ophalen
            String hql = "from Advertentie where ADV_DELETED = false AND ADV_PROVINCIE = '" + rit.getRitVanProvincie() + "'";
            List<Advertentie> advertenties = session.createQuery(hql).list();

            //dan lijst.size randommen 
            Random rand = new Random();
            int num = rand.nextInt(advertenties.size());
            tempAdv = advertenties.get(num);
//// Image gedeelte
//            System.out.println("--> Advertentie: " + tempAdv.getAdvImage());
//            byte[] image = tempAdv.getAdvImage();
//            File advImageFile = imageStreamHelper.bytesStreamToImage(image);
//            request.setAttribute("image", advImageFile);

            //dan de gekozen adv +1 view
            tempAdv.setAdvNrOfViews(tempAdv.getAdvNrOfViews() + 1);

            session.update(tempAdv);

            tx.commit();
            //daarna gekozen adv meesturen (wordt gebruikt in elements/links/advertentie.jsp)
            request.setAttribute("advertentie", tempAdv);
        } catch (Exception e) {
            System.out.println(e);
            request.setAttribute("GeenAdvertentie", "Hier uw Advertentie?");
            System.out.println("geen advertenties in deze provincie. Standaard tekst wordt getoond");
            //hier kan ook een standaard advertentie worden teruggegeven
        }


        request.setAttribute("googleVan", GetGoogleString(rit.getRitVanPlaats(), rit.getRitVanStraat()));
        request.setAttribute("googleNaar", GetGoogleString(rit.getRitNaarPlaats(), rit.getRitNaarStraat()));
        request.setAttribute("rit", rit);

        String address = "/meerijden.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(address);
        dispatcher.forward(request, response);

        session.close();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // Haal de huidige sessie op
        HttpSession sessie = request.getSession();

        //huidige lid uit de sessie halen
        Lid lid = (Lid) sessie.getAttribute("currentUser");
        int lidId = lid.getLidId();

        Session session = null;
        session = SessionManager.openSession();

        //ik krijg de ritid terug van de meerijden.jsp
        int ritId = Integer.parseInt(request.getParameter("ritid"));
        Rit rit = (Rit) session.load(Rit.class, new Integer(ritId));
        Lid lidVanRit = (Lid) session.load(Lid.class, new Integer(rit.getLidId()));

        Meerijder m;
        MeerijderId mId;


        Transaction tx = session.beginTransaction();
        Query q = session.createQuery("FROM Meerijder AS mr WHERE mr.id.ritId = '" + ritId + "' AND mr.id.lidId = '" + lidId + "'");
        m = (Meerijder) q.uniqueResult();

        // Alleen als de Meerijder nog niet bestaat aanmaken en opslaan
        if (m == null) {
            mId = new MeerijderId();
            mId.setRitId(ritId);
            mId.setLidId(lidId);
            m = new Meerijder(mId, false);
            session.save(m);
            //hier ook het veld ritMeerijders ophogen en opslaan
            rit.setRitMeerijders(rit.getRitMeerijders() + 1);
            session.update(rit);

            tx.commit();
        }

        // send mail naar lid met gegevens van currentlid
        try {
            String textMail = "Beste " + lidVanRit.getLidDisplaynaam()
                    + ", " + lid.getLidDisplaynaam()
                    + " wilt graag met u meerijden van " + rit.getRitVanPlaats()
                    + " naar " + rit.getRitNaarPlaats()
                    + " op " + rit.getRitDatum()
                    + ". U kunt " + lid.getLidDisplaynaam()
                    + " via de site accepteren of u kunt ook rechtstreeks contact opnemen via " + lid.getLidEmail()
                    + ". Wij wensen u alvast een fijne reis!";
            String subjectAcceptMail = "Inschrijf verzoek";
            SendMail.send(lidVanRit.getLidEmail(), subjectAcceptMail, textMail);
        } catch (Exception ex) {
        }

        String address = "/mijnDryves.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(address);
        dispatcher.forward(request, response);

        session.close();
    }

    private String GetGoogleString(String Plaats, String Straat) {
        if (Straat == null) {
            return Plaats;
        } else {
            return Plaats + "," + Straat;
        }
    }
}
